Skip to content

Apache VirtualHost mit Define-Variablen effektiv nutzen

Apache Define-Variablen sind eine elegante Möglichkeit, wiederverwendbare Konfigurationen zu erstellen. Sie ermöglichen es, Werte bereits zur Konfigurations-Ladezeit zu setzen und innerhalb von VirtualHost-Blöcken sowie in Include-Dateien zu verwenden.

Vorteile der Nutzung von Define-Variablen

  • Define-Werte werden frühzeitig ersetzt, bevor Apache die Konfigurationsdateien verarbeitet.
  • Include-Dateien erben automatisch die definierten Werte, wenn sie innerhalb eines <VirtualHost>-Blocks geladen werden.
  • Keine zusätzlichen Module wie mod_macro erforderlich.
  • Erhöhte Lesbarkeit und Wartbarkeit der Konfigurationsdateien.

Beispielkonfiguration

VirtualHost-Konfiguration (sites-available/www.example.com.conf)

Define ServerName www.example.com
Define LogDirectory /var/log/apache2
Define ModSecMode DetectionOnly

<VirtualHost *:80>
    ServerName   ${ServerName}
    Include      conf-available/redirect_https.conf
</VirtualHost>

<VirtualHost *:443>
    ServerName   ${ServerName}

    # SSL-Konfiguration
    Include      custom.d/ssl_example.com.conf

    # ModSecurity-Konfiguration laden
    Include      custom.d/waf-config.conf

    # Logging
    ErrorLog  ${LogDirectory}/${ServerName}_err.log
    LogLevel  warn
</VirtualHost>

ModSecurity Include-Datei (custom.d/waf-config.conf)

# File: custom.d/waf-config.conf
# Created: 2025-03-05 15:20:15
# Description: ModSecurity configuration for each virtualhost

<IfModule security2_module>
    SecRuleEngine ${ModSecMode}
    SecAuditLog ${LogDirectory}/${ServerName}_modsec.log
    SecWebAppId "${ServerName}"

    # OWASP Core Rule Set in der richtigen Reihenfolge laden
    IncludeOptional /etc/modsecurity/custom/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
    IncludeOptional /etc/modsecurity/custom/vhostrules.d/${ServerName}_modsec.conf
    IncludeOptional /etc/modsecurity/custom/global_rules.conf
    IncludeOptional /etc/modsecurity/crs/rules/*.conf
    IncludeOptional /etc/modsecurity/custom/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
</IfModule>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

Funktionsweise

  1. Define-Werte setzen

    • Die Define-Werte werden außerhalb des <VirtualHost>-Blocks definiert.
    • Diese Werte sind ab dem Zeitpunkt der Verarbeitung für Apache verfügbar.
  2. Variablen in VirtualHost verwenden

    • ServerName ${ServerName} setzt die Werte korrekt.
    • Include-Dateien können innerhalb des VirtualHost-Blocks auf die Variablen zugreifen.
  3. Variablen in Include-Dateien nutzen
    • custom.d/waf-config.conf kann auf die definierten Werte zugreifen.
    • SecRuleEngine ${ModSecMode} wird direkt durch den Wert DetectionOnly oder On ersetzt.
    • Das Logging nutzt den definierten LogDirectory-Pfad korrekt.

Fazit

Die Nutzung von Define-Variablen in Apache-Konfigurationen bietet eine effiziente und ressourcenschonende Methode, um vHost-Konfigurationen modular und wiederverwendbar zu gestalten. Besonders in Kombination mit Include-Dateien bleibt die Konfiguration übersichtlich, flexibel und einfach zu verwalten.